Qual è il metodo più veloce per convertire un java.nio.ByteBuffer a in un CharBuffer b (appena creato) o char [] b. In questo modo è importante che a [i] == b [i]. Ciò significa che non a [i] e a [i + 1] insieme costituiscono un valore b [j], cosa farebbe getChar (i), ma i valori dovrebbero essere "distribuiti". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // ogni un byte (che sono con segno) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // ognuno a char (che sono senza segno) Nota che byte: -128 ha gli stessi bit (8 inferiori) di char: 128. Quindi presumo che la "migliore" interpretazione sarebbe come l'ho notato sopra, perché i bit sono gli stessi. Dopodiché ho anche bisogno della traduzione viceversa: il modo più efficiente per riportare un char [] o java.nio.CharBuffer in un java.nio.ByteBuffer.
2021-01-06 08:18:28
Quindi, quello che vuoi è convertire usando la codifica ISO-8859-1. Non pretendo nulla sull'efficienza, ma almeno è abbastanza breve da scrivere: Risultato CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer); L'altra direzione sarebbe: ByteBuffer risultato = Charset.forName ("ISO-8859-1"). Encode (charBuffer); Si prega di misurarlo rispetto ad altre soluzioni. (Per essere onesti, la parte Charset.forName non dovrebbe essere inclusa e dovrebbe anche essere eseguita una sola volta, non di nuovo per ogni buffer.) Da Java 7 in poi c'è anche la classe StandardCharsets con istanze Charset preistanziate, quindi puoi usare Risultato CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer); e Risultato ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer); anziché. (Queste righe fanno lo stesso di quelle precedenti, solo la ricerca è più semplice e non c'è il rischio di digitare erroneamente i nomi e non c'è bisogno di catturare le eccezioni impossibili.) | Sono d'accordo con @ Ishtar's, suggerisco di evitare di convertirsi in una nuova struttura e di convertirli solo quando ne hai bisogno. Tuttavia se hai un ByteBuffer heap puoi farlo. ByteBuffer bb = ... byte [] array = bb.array (); char [] chars = new char [bb.remaining ()]; for (int i = 0; i